import { existsSync, readdirSync, rmSync, statSync } from "node:fs"
import { extname, join } from "node:path"
import { ExternalOption } from "rolldown"

/**
 * 简化的 Vite 插件接口：
 * 仅包含必要的配置钩子，避免引入完整的 Vite 依赖。
 */
export interface VitePlugin {
  name: string
  config?: () => {
    resolve?: { alias?: Record<string, string> }
    build?: { rollupOptions?: { external?: ExternalOption } }
  }
}

/**
 * 清理目录中的所有内容。
 *
 * - 如果路径不存在或不是目录，则直接返回。
 * - 如果路径是目录，则递归删除目录中的所有文件和子目录。
 *
 * @param path 要清理的目录路径。
 */
export function cleanDir(path: string) {
  if (!existsSync(path) || !statSync(path).isDirectory()) return
  for (const name of readdirSync(path)) {
    rmSync(join(path, name), { recursive: true })
  }
}

/**
 * 移除文件路径的扩展名。
 *
 * - 如果路径没有扩展名，则返回原始路径。
 * - 如果路径有扩展名，则移除扩展名部分。
 *
 * @param raw 原始文件路径。
 * @returns 移除扩展名后的文件路径。
 */
export function removePathExtension(raw: string) {
  const ext = extname(raw)
  return ext ? raw.slice(0, -ext.length) : raw
}
